package modelLayer;
import java.util.ArrayList;

import ExceptionsPakke.ToSmallException;

/**
 * Salg er en klasse som har ArrayList for flere forskellige klasser, så den har muligheden for at lave et
 * salg.
 * 
 * @author Gruppe 2 
 * @version 1.0
 */
public class Salg
{
    // instance variables - replace the example below with your own
    private long ordreNr;
    private int total;
    private int rabat;
    private ArrayList<Kunde> mineKunder;
    private ArrayList<Vare> mineVarer;
    private ArrayList<VareGruppe> mineGrupper;
    private ArrayList<Udlejning> mineUdlejninger;

    /**
     * Constructor for klassen salg
     * @param long ordreNr
     * @param int rabat
     */
    public Salg(long ordreNr, int rabat) throws ToSmallException
    {
        this.ordreNr = ordreNr;
        if(rabat >0 && rabat <=20)
        {
            this.rabat = rabat;
        }
        else
        {
           throw new ToSmallException("Rabatten skal vaere i mellem 0 og 20 %");
        }
        mineKunder = new ArrayList<Kunde>();
        mineVarer = new ArrayList<Vare>();
        mineUdlejninger = new ArrayList<Udlejning>();
        mineGrupper = new ArrayList<VareGruppe>();
        total = 0;
    }

    /**
     * En get metode for ordreNr
     * @return long ordreNr
     */
    public long getOrdreNr()
    {
        return ordreNr;
    }

    /**
     * En get metode for total
     * @return int Total
     */
    public int getTotal()
    {

        return total;
    }

    /**
     * En get metode for rabat
     * @return int Rabat
     */
    public int getRabat()
    {
        return rabat;
        
    }

    /**
     * En set metode for ordreNr
     * @param long ordreNr
     */
    public void setOrdreNr(long ordreNr)
    {
        this.ordreNr = ordreNr;
    }

    /**
     * En set metode for total
     * @param int Total
     */
    public void setTotal()
    {
    	total = 0;
    	int uIndex = 0;
    	int index = 0;
        long vareID =0;

        boolean counter = true;
        while(index < mineVarer.size())
        {
            if (counter)
            {

                vareID = mineVarer.get(index).getId();
                counter = false;
                index++;
            }

            if (!counter)
            {
                for(VareGruppe vg : mineGrupper)
                {
                    Vare v = vg.findVare(vareID);
                    if (v != null)
                    {
                        total = total + vg.getPris();
                        counter = true;
                    }

                }
            }
        }
        while(uIndex < mineUdlejninger.size())
        {
            total = total + mineUdlejninger.get(uIndex).getPris();
            uIndex++;
        }
        total = total - (total/100*rabat);

    }
    
    /**
     * En set metode for rabat
     * @param int rabat
     */
    public void setRabat(int rabat)
    {
        if(rabat >0 && rabat <=20)
        {
            this.rabat = rabat;
        }
        else
        {
            System.out.println("Rabatten skal være i mellem 0 og 20 %");
        }
    }

    /**
     * En metode som tilføjer kunder til vores ArrayList mineKunder
     * @param Kunde k
     */
    public void addKunde(Kunde k)
    {
        mineKunder.add(k);
    }

    /**
     * En metode som sletter kunder fra vores ArrayList mineKunder
     * @param Kunde k
     */
    public void sletKunde(Kunde k)
    {
        mineKunder.remove(k);
    }

    /**
     * En metode som tilføjer udlejninger til vores ArrayList mineUdlejninger
     * @param Udlejning u
     */
    public void addUdlejning(Udlejning u)
    {
        mineUdlejninger.add(u);
    }
    
    /**
     * 
     */
    public Udlejning findUdlejning(long id)
    {
        int index = 0;
        boolean searching = true;
        while(searching == true && mineUdlejninger.size()>index)
        {
            Udlejning u = mineUdlejninger.get(index);
            if(u.getId()== id)
            {
                searching = false;
            }
            else
            {
                index++;
            }
        }
        if(!searching)
        {
            return mineUdlejninger.get(index);
        }
        else
        {
            return null;
        }
    }
    
    
    /**
     * En metode som tilføjer varer til vores ArrayList mineVarer
     * @param Vare v
     */
    public void addVare(Vare v)
    {
        mineVarer.add(v);
    }

    /**
     * En metode som tilføjer varegrupper til vores ArrayList mineGrupper
     * @param VareGruppe vg
     */
    public void addVareGruppe(VareGruppe vg)
    {
        mineGrupper.add(vg);
    }
    
    
    /**
     * En metode som tager information omkring et salg og gemmer den i en ArrayList til senere brug.
     * @return ArrayList<String> salg.
     */
    public ArrayList<String> printSalg()
    {
    	setTotal();
        ArrayList<String> salg = new ArrayList<String>();
        salg.add("\n"+"Odrenr: " + ordreNr+"\n");
        salg.add("Total: " + total+"\n");
        salg.add("Rabat: " + rabat+"\n");
        for(Vare v : mineVarer)
        {
            salg.add("id nummer: " + v.getId()+"\n");
        }
        for(Kunde k : mineKunder)
        {
            salg.add("Kunde navn " + k.getNavn()+"\n");
        }
        for(Udlejning u : mineUdlejninger)
        {
            salg.add("Udlejnings id: " + u.getId()+"\n");
        }
        return salg;
    }
    
    

    
}
